#include<bits/stdc++.h>
using namespace std;
const int maxn=3e6+5;
int n,m,dfn[maxn],low[maxn];
struct Edge{
	int u,v,w,nxt;
}e[maxn];
vector<int>d[maxn];
int du[maxn];
int cnt,h[maxn],dep[maxn];
void ad(int u,int v,int w){
	e[++cnt].u=u;
	e[cnt].v=v;
	e[cnt].w=w;
	e[cnt].nxt=h[u];
	h[u]=cnt;
}
int dc=0;
void dfs(int x,int fa){
	dfn[x]=low[x]=++dc;
	dep[x]=dep[fa]+1;
	d[dep[x]].push_back(dfn[x]);
	for(int i=h[x];i;i=e[i].nxt){
		int to=e[i].v;
		if(to==fa){
			continue;
		}
		dfs(to,x);
	}
	low[x]=dc;
}
vector<int>::iterator Beg,End; 
int main(){
	int tot=0;
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1,u,v;i<n;i++){
		cin>>u>>v;
		du[v]++;
		ad(u,v,1);
		ad(v,u,1);	
	}
	int s=0;
	for(int i=1;i<=n;i++){
		if(!du[i]){
			s=i;
			break;
		}
	}
	dfs(s,0);
	while(m--){
		int i,k;
		cin>>i>>k;
		Beg=lower_bound(d[k].begin(),d[k].end(),dfn[i]);
		End=upper_bound(d[k].begin(),d[k].end(),low[i]);
		cout<<End-Beg<<endl;
	}
	return 0;
}